<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="js/jquery.min.js"></script>
</head>
<body>
<p>模版上传</p>
<progress id="progressBar" value="0" max="100" style="width: 300px;display:none"></progress>
		<span id="percentage"></span><span id="time"></span>
<input type="file" id="file" name="myfile" />
<input type="button" onclick="UpladFile()" value="上传" />
<input type="button" onclick="cancleUploadFile()" value="取消" />
<span style="display:none" id="name"></span>
<hr/>
<div id="form1" style="display:flex">
	<div style="">
		<p>url</p>
		<input type="text" value="jdbc:oracle:thin:@192.168.1.6:1521/ORCL2" name="url" id="url" style="width:444px">
	</div>
	<div style="margin-left:100px">
		<p>username</p>
		<input type="text" value="house_test" name="username" id="username">
	</div>
	<div style="margin-left:100px">
		<p>password</p>
		<input type="text" value="123456" name="password" id="password">
	</div>
</div>

<div>
	<p>parametersMap</p>
	<input type="text" value="" name="parametersMap" id="parametesMap" style="width:990px">
</div>
<div id="box">
	<p>tables    <span style="font-size:20px" onclick="add()"><img src="timg.jpg" style="width:23px"></span></p>
</div>

<p>文件下载</p>
<button onclick="down()">生成文件</button>
<hr/>
<a id="firstUrl"></a>

<script type="text/javascript">
//图片上传
var xhr;
//上传文件方法
function UpladFile() {
	var fileObj = document.getElementById("file").files[0]; // js 获取文件对象
	$("#name").html(fileObj.name);
	var url = "upload"; // 接收上传文件的后台地址

	var form = new FormData(); // FormData 对象
	form.append("file", fileObj); // 文件对象

	xhr = new XMLHttpRequest(); // XMLHttpRequest 对象
	xhr.open("post", url, true); //post方式，url为服务器请求地址，true 该参数规定请求是否异步处理。
	xhr.onload = uploadComplete; //请求完成
	xhr.onerror = uploadFailed; //请求失败

	xhr.upload.onprogress = progressFunction; //【上传进度调用方法实现】
	xhr.upload.onloadstart = function() { //上传开始执行方法
		ot = new Date().getTime(); //设置上传开始时间
		oloaded = 0; //设置上传开始时，以上传的文件大小为0
	};

	xhr.send(form); //开始上传，发送form数据
}

//上传成功响应
function uploadComplete(evt) {
	//服务断接收完文件返回的结果
    alert(evt.target.responseText);
	var data = evt.target.responseText;
}
//上传失败
function uploadFailed(evt) {
	alert("上传失败！");
}
//取消上传
function cancleUploadFile() {
	xhr.abort();
}

//上传进度实现方法，上传过程中会频繁调用该方法
function progressFunction(evt) {
	$("#progressBar").show();
	var progressBar = document.getElementById("progressBar");
	var percentageDiv = document.getElementById("percentage");
	// event.total是需要传输的总字节，event.loaded是已经传输的字节。如果event.lengthComputable不为真，则event.total等于0
	if(evt.lengthComputable) { //
		progressBar.max = evt.total;
		progressBar.value = evt.loaded;
		percentageDiv.innerHTML = Math.round(evt.loaded / evt.total * 100) + "%";
	}
	var time = document.getElementById("time");
	var nt = new Date().getTime(); //获取当前时间
	var pertime = (nt - ot) / 1000; //计算出上次调用该方法时到现在的时间差，单位为s
	ot = new Date().getTime(); //重新赋值时间，用于下次计算
	var perload = evt.loaded - oloaded; //计算该分段上传的文件大小，单位b
	oloaded = evt.loaded; //重新赋值已上传文件大小，用以下次计算
	//上传速度计算
	var speed = perload / pertime; //单位b/s
	var bspeed = speed;
	var units = 'b/s'; //单位名称
	if(speed / 1024 > 1) {
		speed = speed / 1024;
		units = 'k/s';
	}
	if(speed / 1024 > 1) {
		speed = speed / 1024;
		units = 'M/s';
	}
	speed = speed.toFixed(1);
	//剩余时间
	var resttime = ((evt.total - evt.loaded) / bspeed).toFixed(1);
	time.innerHTML = '，速度：' + speed + units + '，剩余时间：' + resttime + 's';
	if(bspeed == 0) time.innerHTML = '上传已取消';
}
function add() {
	var box = $("#box");
	var list = "";
	list += "<input type='text' value='' name='keyData' class='keyData'>";
	list += "<input type='text' value='' name='valueData' class='valueData' style='width:812px;margin-left:5px'><br/>";
	box.append(list);
}


function  getFromData() {
    var dataMap = new Map();
    $("#form1").each(function(){
        var value= $.trim($(this).val());      //去空格后的input 值
        var name= $(this).attr('name');
        dataMap.set(name,value);
    });
 
    let obj= Object.create(null);
    for (let[k,v] of dataMap) {
        obj[k] = v;
    }
    return obj;
}

function down(){
	var mapList = new Map;
	for(var i = 0;i < $(".keyData").length;i++) {
		mapList.set($(".keyData")[i].value, $(".valueData")[i].value);
	}
	var tableObj= Object.create(null);
    for (var[k,v] of mapList) {
    	tableObj[k] = v;
    }
	let obj=getFromData();
	 $.ajax({
	          url: "download",
	          type: "get",
	          dataType:'json',
	          data: {
	        	  "parametersMap":$("#parametesMap").val(),
	        	  "url":$("#url").val(),
	        	  "username":$("#username").val(),
	        	  "password":$("#password").val(),
	        	  "tables":JSON.stringify(tableObj),
	        	  "name":$("#name").html(),
	          },
	          success: function (data) {
	        	$("#firstUrl").html(data.firstUrl);
				$("#firstUrl").attr("href",data.firstUrl);
	         },
	         error: function (data) {
		        	$("#firstUrl").html(data.firstUrl);
					$("#firstUrl").attr("href",data.firstUrl);
		         },
	 })	
	
	
}




</script>
</body>
</html>